package net.zoneland.knowledge.service.impl;

import net.zoneland.knowledge.dao.DutyPermissionMapper;
import net.zoneland.knowledge.service.PermissionService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 职务权限服务.
 */
@Service
public class PermissionServiceImpl implements PermissionService {

    /**
     * 权限分类数据服务.
     */
    @Resource
    private DutyPermissionMapper dutyPermissionMapper;

    /**
     * 通过职务编码获取权限信息.
     *
     * @param naviCodeList 职务编码列表List<以逗号分隔的权限编码字符串>.
     * @return 返回权限信息列表.
     */
    @Override
    public List<String> queryPermissionsByNaviCodeList(final List<String> naviCodeList) {
        //根据职务编码获取权限信息列表
        return dutyPermissionMapper.getPowerCategoryListByNaviCode(naviCodeList).stream()
            //将以逗号分隔的权限编码string转成list<单个权限>
            .map(this::permissionsStrToList)
            //所有的职务权限列表List<List<String>>合成一个list<string>
            .flatMap(Collection::stream)
            //去除重复的权限
            .distinct()
            .collect(Collectors.toList());
    }

    /**
     * 将逗号分隔的权限字符串转换成list<roleId>.
     * @param roleIdStr 逗号分隔的权限分类字符串，如 learnReferQuery,knowledgeBaseEdit,smartXunjian
     * @return 返回权限分类列表list<roleId>.
     */
    private List<String> permissionsStrToList(final String roleIdStr) {
        return Arrays.asList(roleIdStr.split(","));
    }


}
